package com.ykdl.member.kid.util;

//import java.security.MessageDigest;
//import java.security.NoSuchAlgorithmException;
//
//import com.wxxr.app.web.util.StringUtils;
//
//public class SecureConnUtils {
//	private static final int DEF = 'w' + 'x' + 'x' + 'r'; // 默认位移数
//
//	/**
//	 * @param mDeviceId
//	 *            设备id
//	 * @param mCurrentTime
//	 *            当前时间
//	 * @return md5码
//	 * @throws NoSuchAlgorithmException
//	 */
//	public static String encode(String mDeviceId, String mCurrentTime) {
//		try {
//			return secureConn(mDeviceId, mCurrentTime, -1);
//		} catch (NoSuchAlgorithmException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//			return "";
//		}
//	}
//
//	/**
//	 * 
//	 * @param mDeviceId
//	 *            设备id
//	 * @param mCurrentTime
//	 *            当前时间
//	 * @param shift
//	 *            位移数
//	 * @return md5码
//	 * @throws NoSuchAlgorithmException
//	 */
//	public static String encode(String mDeviceId, String mCurrentTime, int shift)
//			throws NoSuchAlgorithmException {
//		return secureConn(mDeviceId, mCurrentTime, shift);
//	}
//
//	private static String secureConn(String mDeviceId, String mCurrentTime,
//			int i) throws NoSuchAlgorithmException {
//		if (StringUtils.isBlank(mDeviceId) || StringUtils.isBlank(mCurrentTime))
//			return "";
//		Long deviceId = Long.valueOf(mDeviceId);
//
//		long date = Long.valueOf(mCurrentTime);
//
//		long wxxr = 0;
//		if (i == -1) {
//			wxxr = date >> DEF; // 对当前时间位远算
//		} else {
//			wxxr = date >> i;
//		}
//		deviceId -= wxxr;
//
//
//		String deviceId1 = deviceId.toString().substring(0, 10); // 在处理后的设备id第10位插入当前时间
//		String deviceId2 = deviceId.toString().substring(10,
//				deviceId.toString().length());
//
//		String str = deviceId1 + date + deviceId2;
//		MessageDigest digest = null;
//		String result = null;
//		if (str == null || "".equals(str)) {
//			return "";
//		} else {
//			digest = MessageDigest.getInstance("MD5");
//			result = new String(Base64.encode(digest.digest(str.getBytes())));
//		}
//		return result == null ? "" : result;
//	}
//
//}

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import com.ykdl.member.kid.util.StringUtils;
/**
 * 加密的工具类
 * @since 1.0
 */
public class SecureConnUtils
{
	private static final int DEF = 'w' + 'x' + 'x' + 'r'; // 默认位移数
	private static final char[] bcdLookup =
	{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd',
			'e', 'f' };

	/**
	 * @param mDeviceId
	 *            设备id
	 * @param mCurrentTime
	 *            当前时间
	 * @return md5码
	 * @throws NoSuchAlgorithmException
	 */
//	public static String encode(String mDeviceId, String mCurrentTime,String key)
//			throws NoSuchAlgorithmException
//	{
//		return secureConn(mDeviceId, mCurrentTime, key);
//	}

	/**
	 * 
	 * @param mDeviceId
	 *            设备id
	 * @param mCurrentTime
	 *            当前时间
	 * @param shift
	 *            位移数
	 * @return md5码
	 * @throws NoSuchAlgorithmException
	 */
	public static String encode(String mDeviceId, String mCurrentTime, String key)
			throws NoSuchAlgorithmException
	{
		return secureConn(mDeviceId, mCurrentTime, key);
	}

	private static String secureConn(String mDeviceId, String mCurrentTime,
			String key) throws NoSuchAlgorithmException
	{
		if (StringUtils.isBlank(mDeviceId) || StringUtils.isBlank(mCurrentTime))
			return "";
//		Long deviceId = Long.valueOf(mDeviceId);

//		long date = Long.valueOf(mCurrentTime);
//
//		long wxxr = 0;
//		if (i == -1)
//		{
//			wxxr = date >> DEF; // 对当前时间位远算
//		} else
//		{
//			wxxr = date >> i;
//		}
//		deviceId -= wxxr;

		// 模拟器运行
		if (mDeviceId == null || mDeviceId.toString().length() <5)
		{
			mDeviceId = "1233211234567L";
		}

//		String deviceId1 = deviceId.toString().substring(0, 10); // 在处理后的设备id第10位插入当前时间
//		String deviceId2 = deviceId.toString().substring(10,
//				deviceId.toString().length());

		String str = mDeviceId +"$"+ key +"$"+mCurrentTime;
		MessageDigest digest = null;
		String result = null;
		if (str == null || "".equals(str))
		{
			return "";
		} else
		{
			digest = MessageDigest.getInstance("MD5");
			try {
				digest.reset();
				digest.update(str.getBytes("UTF-8"));
				result = bytesToHexStr(digest.digest());
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return result == null ? "" : result;
	}

	/**
	 * 将字节转换为十六进制的字符串 Transform the specified byte into a Hex String form.
	 */
	public static final String bytesToHexStr(byte[] byteArray)
	{
//		StringBuffer s = new StringBuffer(bcd.length * 2);
//
//		for (int i = 0; i < bcd.length; i++)
//		{
//			s.append(bcdLookup[(bcd[i] >>> 4) & 0x0f]);
//			s.append(bcdLookup[bcd[i] & 0x0f]);
//		}
//		return s.toString();
		
		 StringBuffer md5StrBuff = new StringBuffer();

	        for (int i = 0; i < byteArray.length; i++) {
	            if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
	                md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
	            else
	                md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
	        }

	        return md5StrBuff.toString();
		
		
	}

}
